package com.youdoneed.community.forum.dao;

import com.youdoneed.community.forum.entity.Forumnotice;
import com.youdoneed.community.forum.vo.ForumnoticeVo;

import java.util.List;

import com.youdoneed.community.forum.vo.updateUserInfoVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;


/**
 * @author liudong
 *         <p>
 *         描述：消息通知dao接口定义
 */

@Mapper
public interface ForumnoticeMapper {

    /**
     * 用户修改个人信息时，把对应的通知中的用户信息一起改掉
     *
     * @return
     */
    int updateUserInfo(updateUserInfoVo vo);

    /**
     * 功能描述:根据主键id删除
     *
     * @param forumNoticeId 主键id
     */
    int deleteByPrimaryKey(String forumNoticeId);

    /**
     * 功能描述:根据sourceId删除
     *
     * @param sourceId
     * @return
     */
    int deleteBySourceId(String sourceId);

    /**
     * 功能描述：插入消息通知数据，主键需要手动生成
     */
    int insertSelective(Forumnotice record);


    /**
     * 功能描述:根据主键id查询
     *
     * @param forumNoticeId 主键id
     */
    Forumnotice selectByPrimaryKey(String forumNoticeId);

    /**
     * 功能描述:根据主键id更新数据
     */
    int updateByPrimaryKeySelective(Forumnotice record);


    /**
     * 功能描述:根据条件查询通知列表
     *
     * @param userId     用户id  where做了非空判断
     * @param qrySdate   查询开始时间 where做了非空判断
     * @param qryEdate   查询结束时间 where做了非空判断
     * @param readStatus 消息状态 where做了非空判断
     */
    List<Forumnotice> qryNoticeList(@Param("userId") String userId,
                                    @Param("qrySdate") String qrySdate,
                                    @Param("qryEdate") String qryEdate,
                                    @Param("readStatus") Integer readStatus);

    /**
     * 功能描述:根据条件查询通知列表数量
     *
     * @param userId     用户id  where做了非空判断
     * @param qrySdate   查询开始时间 where做了非空判断
     * @param qryEdate   查询结束时间 where做了非空判断
     * @param readStatus 消息状态 where做了非空判断
     */
    int qryNoticeCnt(@Param("userId") String userId,
                     @Param("qrySdate") String qrySdate,
                     @Param("qryEdate") String qryEdate,
                     @Param("readStatus") Integer readStatus);

    /**
     * 功能描述:根据条件查询最新通知，按时间倒序
     *
     * @param userId     用户id  where做了非空判断
     * @param qrySdate   查询开始时间 where做了非空判断
     * @param readStatus 消息状态 where做了非空判断
     */
    ForumnoticeVo qryFirstNotice(@Param("userId") String userId,
                                 @Param("qrySdate") String qrySdate,
                                 @Param("readStatus") Integer readStatus);

    /**
     * 功能描述:根据条件更新通知状态
     *
     * @param userId        用户id  where做了非空判断
     * @param forumNoticeId 消息通知主键id where做了非空判断
     * @param qrySdate      查询开始时间 where做了非空判断
     * @param qryEdate      查询结束时间 where做了非空判断
     * @param readStatus    消息状态 where做了非空判断
     */
    int updateNoticeList(@Param("userId") String userId,
                         @Param("forumNoticeId") String forumNoticeId,
                         @Param("qrySdate") String qrySdate,
                         @Param("qryEdate") String qryEdate,
                         @Param("readStatus") Integer readStatus);

    List<Forumnotice> findForumnoticeByNoticeUerId(String noticeUserId);
}